home *** CD-ROM | disk | FTP | other *** search
- property pNumberTransitionStates, spriteNum, pToggleStyle, pToggleGroupName, pToggleGroupList, pGroupDefault, pToggleOffable, pSelfToggling, pToggleOn_OthersOff, pToggleAllOff_DefaultOn, pNormMember, pCurrentState, pToggleState, pMouseDownWithin, pMouseWithin
-
- on new me, inSpriteNum, inNumTrans, inTogSty, inTogGrup, inTogState, inTogOffbl, inSelfTog, inTogOnOthOff, inTogAllOffDefOn
- set spriteNum to inSpriteNum
- set pNumberTransitionStates to inNumTrans
- if voidp(inTogSty) then
- set pToggleStyle to 0
- else
- set pToggleStyle to inTogSty
- end if
- if voidp(inTogGrup) then
- set pToggleGroupName to EMPTY
- else
- set pToggleGroupName to inTogGrup
- end if
- if voidp(inTogState) then
- set pToggleState to #off
- else
- set pToggleState to inTogState
- end if
- if voidp(inTogOffbl) then
- set pToggleOffable to 1
- else
- set pToggleOffable to inTogOffbl
- end if
- if voidp(inSelfTog) then
- set pSelfToggling to 1
- else
- set pSelfToggling to inSelfTog
- end if
- if voidp(inTogOnOthOff) then
- set pToggleOn_OthersOff to 0
- else
- set pToggleOn_OthersOff to inTogOnOthOff
- end if
- if voidp(inTogAllOffDefOn) then
- set pToggleAllOff_DefaultOn to 0
- else
- set pToggleAllOff_DefaultOn to inTogAllOffDefOn
- end if
- beginSprite(me)
- return me
- end
-
- on beginSprite me
- set pCurrentState to #norm
- set pNormMember to the memberNum of sprite the spriteNum of me
- if not pToggleStyle then
- set pToggleState to #off
- end if
- if pToggleState = #on then
- set pGroupDefault to 1
- setstate(me, #norm)
- end if
- set pToggleGroupList to [me]
- if not (pToggleGroupName = EMPTY) then
- sendAllSprites(#AppendToListIfToggleGroupNameMatchesInput, pToggleGroupName, pToggleGroupList)
- end if
- end
-
- on mouseEnter me
- if pCurrentState = #dead then
- exit
- end if
- if (pToggleState = #on) and pSelfToggling and not pToggleOffable then
- exit
- end if
- if the mouseDown then
- mouseDown(me)
- else
- setstate(me, #roll)
- sendSprite(the spriteNum of me, #MouseEnterAction)
- set pMouseDownWithin to 0
- set pMouseWithin to 1
- end if
- end
-
- on mouseDown me
- if pCurrentState = #dead then
- exit
- end if
- if (pToggleState = #on) and pSelfToggling and not pToggleOffable then
- exit
- end if
- setstate(me, #down)
- sendSprite(the spriteNum of me, #MouseDownAction)
- set pMouseDownWithin to 1
- set pMouseWithin to 0
- end
-
- on mouseUp me
- if pCurrentState = #dead then
- exit
- end if
- if (pToggleState = #on) and pSelfToggling and not pToggleOffable then
- exit
- end if
- if pToggleStyle then
- if pSelfToggling then
- toggle(me)
- end if
- end if
- if (pToggleState = #on) and not pToggleOffable then
- setstate(me, #norm)
- else
- setstate(me, #roll)
- end if
- sendSprite(the spriteNum of me, #MouseUpAction)
- set pMouseDownWithin to 0
- set pMouseWithin to 1
- end
-
- on mouseLeave me
- if pCurrentState = #dead then
- exit
- end if
- if (pToggleState = #on) and pSelfToggling and not pToggleOffable then
- exit
- end if
- setstate(me, #norm)
- sendSprite(the spriteNum of me, #MouseLeaveAction)
- set pMouseDownWithin to 0
- set pMouseWithin to 0
- end
-
- on mouseWithin me
- if pCurrentState = #dead then
- exit
- end if
- if (pToggleState = #on) and pSelfToggling and not pToggleOffable then
- exit
- end if
- if the mouseUp and pMouseDownWithin then
- mouseUp(me)
- else
- if the mouseUp and not pMouseWithin then
- mouseEnter(me)
- end if
- end if
- end
-
- on setstate me, state
- set pCurrentState to state
- if pToggleState = #off then
- case pCurrentState of
- #dead:
- set the memberNum of sprite the spriteNum of me to pNormMember - 1
- #norm:
- set the memberNum of sprite the spriteNum of me to pNormMember
- #roll:
- if pNumberTransitionStates = 3 then
- nothing()
- else
- set the memberNum of sprite the spriteNum of me to pNormMember + 1
- end if
- #down:
- if pNumberTransitionStates = 3 then
- set the memberNum of sprite the spriteNum of me to pNormMember + 1
- else
- set the memberNum of sprite the spriteNum of me to pNormMember + 2
- end if
- end case
- else
- case pCurrentState of
- #dead:
- case pNumberTransitionStates of
- 3:
- set the memberNum of sprite the spriteNum of me to pNormMember - 1
- 4:
- set the memberNum of sprite the spriteNum of me to pNormMember - 1
- 5:
- set the memberNum of sprite the spriteNum of me to pNormMember - 1
- 6:
- set the memberNum of sprite the spriteNum of me to pNormMember - 1
- 8:
- set the memberNum of sprite the spriteNum of me to pNormMember + 3
- end case
- #norm:
- case pNumberTransitionStates of
- 3:
- set the memberNum of sprite the spriteNum of me to pNormMember + 1
- 4:
- set the memberNum of sprite the spriteNum of me to pNormMember + 2
- 5:
- set the memberNum of sprite the spriteNum of me to pNormMember + 2
- 6:
- set the memberNum of sprite the spriteNum of me to pNormMember + 2
- 8:
- set the memberNum of sprite the spriteNum of me to pNormMember + 4
- end case
- #roll:
- case pNumberTransitionStates of
- 3:
- nothing()
- 4:
- set the memberNum of sprite the spriteNum of me to pNormMember + 1
- 5:
- set the memberNum of sprite the spriteNum of me to pNormMember + 3
- 6:
- set the memberNum of sprite the spriteNum of me to pNormMember + 3
- 8:
- set the memberNum of sprite the spriteNum of me to pNormMember + 5
- end case
- #down:
- case pNumberTransitionStates of
- 3:
- set the memberNum of sprite the spriteNum of me to pNormMember
- 4:
- set the memberNum of sprite the spriteNum of me to pNormMember
- 5:
- set the memberNum of sprite the spriteNum of me to pNormMember
- 6:
- set the memberNum of sprite the spriteNum of me to pNormMember + 4
- 7:
- set the memberNum of sprite the spriteNum of me to pNormMember + 6
- end case
- end case
- end if
- end
-
- on toggle me
- if pToggleState = #on then
- set pToggleState to #off
- if pToggleAllOff_DefaultOn then
- ToggleDefaultOnIfAllOff()
- end if
- else
- set pToggleState to #on
- if pToggleOn_OthersOff then
- repeat with buttonObject in pToggleGroupList
- if the spriteNum of buttonObject = the spriteNum of me then
- next repeat
- end if
- ToggleOff(buttonObject)
- end repeat
- end if
- end if
- end
-
- on AppendToListIfToggleGroupNameMatchesInput me, groupName, inputList
- if groupName = EMPTY then
- exit
- end if
- if groupName = pToggleGroupName then
- append(inputList, me)
- set pToggleGroupList to inputList
- end if
- end
-
- on ToggleDefaultOnIfAllOff me
- set foundOn to 0
- repeat with buttonObject in pToggleGroupList
- if the pToggleState of buttonObject then
- set foundOn to 1
- exit repeat
- end if
- end repeat
- if not foundOn then
- repeat with buttonObject in pToggleGroupList
- if the pGroupDefault of buttonObject = 1 then
- set the pToggleState of buttonObject to #on
- setstate(buttonObject, the pCurrentState of buttonObject)
- exit repeat
- end if
- end repeat
- end if
- end
-
- on ToggleOff me
- set pToggleState to #off
- setstate(me, pCurrentState)
- end
-
- on getPropertyDescriptionList me
- set description to [:]
- addProp(description, #pNumberTransitionStates, [#default: 4, #format: #symbol, #comment: "Number Of Transition States", #range: [3, 4, 8]])
- addProp(description, #pToggleStyle, [#default: 0, #format: #boolean, #comment: "Toggle Style Button"])
- addProp(description, #pToggleState, [#default: #off, #format: #symbol, #comment: "Initial State (#on indicates group default)", #range: [#off, #on]])
- addProp(description, #pToggleGroupName, [#default: EMPTY, #format: #text, #comment: "Optional Toggle Group Name"])
- addProp(description, #pToggleOn_OthersOff, [#default: 0, #format: #boolean, #comment: "Toggling On Turns Others In Group Off"])
- addProp(description, #pToggleOffable, [#default: 1, #format: #boolean, #comment: "Can Be Toggled Off"])
- addProp(description, #pToggleAllOff_DefaultOn, [#default: 0, #format: #boolean, #comment: "Toggling Off Turns Group Default On"])
- return description
- end
-
- on getBehaviorDescription me
- set endChar to offset("--END OF HEADER", the text of me)
- set endLine to the number of lines in char 1 to endChar of the text of me - 1
- set description to line 1 to endLine of the text of me
- repeat with whichLine = endLine down to 1
- if line whichLine of description = EMPTY then
- delete line whichLine of description
- end if
- end repeat
- delete line 1 of description
- return description
- end
-